/*
 * sockets.h
 *
 *  Created on: 12/10/2011
 *      Author: utn_so
 */

#ifndef SOCKETS_H_
#define SOCKETS_H_


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/select.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCK_BUFFER 542
#define LEERSECTOR 0x55
#define ESCRIBIRSECTOR 0x56
#define CABEZAL 0x57
#define CLEAN 0x58
#define TRACE 0x59
#define EXIT 0x60

typedef struct {
char DescriptorID[20];
char PayloadDescriptor;
int32_t PayloadLength;
uint32_t nroSector;
char *payload;
}__attribute__ ((__packed__)) t_NIPC;

int32_t AFINET_abrir_conexion(unsigned short puerto);
int32_t AFUNIX_abrir_conexion(char *ruta);
int32_t aceptar_conexion(int32_t sockfd);
int32_t AFINET_conectar(char *dirIP, unsigned short puerto);
int32_t AFUNIX_conectar(char *ruta);

int32_t sendall(int32_t s, char *buf, int32_t *len);
int32_t NIPC_enviar(int32_t sock, t_NIPC paquete);
int32_t NIPC_recibir(int32_t sock, t_NIPC *paquete);
void obtenerDescriptor(char *ID);
void NIPC_crearpaquete (char *DescriptorID, char PayloadDescriptor, int32_t PayloadLength, char *Payload, uint32_t nroSector, t_NIPC *ret);
void NIPC_destruirpaquete(t_NIPC *paquete);
int32_t liberarMemoria (char **memoriaALiberar);
char *serializar(t_NIPC paquete);
void deserializar (char *buffer, t_NIPC* paquete);


#endif /* SOCKETS_H_ */
